/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package personas;

import java.util.Random;

/**
 *
 * @author Matiu
 */
public class persona implements Runnable{
    private String nombre;
    private char inicial;
    private int origenX;
    private int origenY;
    private int destinoX;
    private int destinoY;
    private char[][] ciudad;
    private int ir;
    private transient Thread hilo = new Thread(this); 
    private int posicionActual[] = new int[2];
    
    
    public persona(char [][] city,String nombre, char inicial, int origenX, int origenY, int destinoX, int destinoY){
        this.nombre=nombre;
        this.inicial=inicial;
        this.origenX=origenX;
        this.origenY=origenY;
        this.destinoX=destinoX;
        this.destinoY=destinoY;
        ciudad=city;
        posicionActual[0]=origenX;
        posicionActual[1]=origenY;
    }
    @Override
    public void run() {
        int c;
        getOrigen();
        getDestino();
        
        System.out.println("******************NOMBRE ****************************");
                getNombre();
        
        moverse(1,inicial);
        
        
        if(moverse(0,inicial)){
            c=0;
        }
        else{
            moverse(1,inicial);
            c=1;
        }
        if(moverse(1-c,inicial)){
            for(int i=0;i<42;i++){for(int j=0;j<42;j++){System.out.print(ciudad[j][i]);}System.out.println();}
            System.out.println("*****************************************************");
            return;
        }
        
        esquina(c, inicial);
        moverse(1-c, inicial);
        moverse(c, inicial);
        for(int i=0;i<42;i++){for(int j=0;j<42;j++){System.out.print(ciudad[j][i]);}System.out.println();}
               System.out.println("*****************************************************");
        
       
    }
    public void start(){
		hilo.start();
	}
	@SuppressWarnings("deprecation")
	public void finalizar(){
		hilo.stop();
	}
        
//***************Mueve x hasta llegar a un cruze o el destino
    public boolean moverse(int c, char nombre){//devuelve un true si llego a destino en X, o false si llego a una esquina
        int[] posicionAux=new int[2];
        boolean sigo=true;
        int[] destino= new int[2];
        int direccion;
        int sentido;
        int K;
        //*******MUEVE EN X******
        posicionAux[0]=posicionActual[0];
        posicionAux[1]=posicionActual[1];
        
        
        destino[0]=destinoX;
        destino[1]=destinoY;
        
        while(sigo){
            
            direccion = posicionActual[c]-destino[c];
            sentido=Integer.signum(direccion);
            //System.out.println("el sentido es: "+sentido);
            
           if(sentido==0){
               
               return true;}
           
           posicionAux[c]=posicionActual[c]-sentido;
           //System.out.println(ciudad[posicionAux[0]][posicionAux[1]]);
           //System.out.println("while : "+posicionAux[0]+"-"+posicionAux[1]);
           switch(ciudad[posicionAux[0]][posicionAux[1]]){
               case '-':
                   return false;
               case 'v':
                   ir=sentido;
                   posicionActual[c]=posicionAux[c];
                   ciudad[posicionActual[0]][posicionActual[1]]=nombre;
                   
                   //for(int i=0;i<42;i++){for(int j=0;j<42;j++){System.out.print(ciudad[j][i]);}System.out.println();}
                   
                   sigo=true;
                   break;
               case 'z':
                   ir=sentido;
                   //monitor 
                   //primero cargo la posicion actual al vector auxiliar para estar de nuevo 
                   posicionAux[c]=posicionActual[c];//sobre la vereda y no sobre 'z'
                   //ahora miro de que lado tengo la vereda
                   //System.out.println("****************Cruze de la esquina***********");
                   K=lalala(posicionAux,c);
                   posicionAux[1-c]=posicionActual[1-c];
                   posicionAux[1-c]=posicionAux[1-c]+K;
                   posicionAux[c]=posicionAux[c]-sentido;
                   posicionActual[0]=posicionAux[0];
                   posicionActual[1]=posicionAux[1];
                   ciudad[posicionActual[0]][posicionActual[1]]=nombre;
                   //for(int i=0;i<42;i++){for(int j=0;j<42;j++){System.out.print(ciudad[j][i]);}System.out.println();}
                   posicionAux[c]=posicionAux[c]-sentido;
                   posicionActual[0]=posicionAux[0];
                   posicionActual[1]=posicionAux[1];
                   ciudad[posicionActual[0]][posicionActual[1]]=nombre;
                   //for(int i=0;i<42;i++){for(int j=0;j<42;j++){System.out.print(ciudad[j][i]);}System.out.println();}
                   posicionAux[c]=posicionAux[c]-sentido;
                   posicionAux[1-c]=posicionAux[1-c]-K;
                   posicionActual[0]=posicionAux[0];
                   posicionActual[1]=posicionAux[1];
                   ciudad[posicionActual[0]][posicionActual[1]]=nombre;
                   //for(int i=0;i<42;i++){for(int j=0;j<42;j++){System.out.print(ciudad[j][i]);}System.out.println();}
                   sigo=true;
                   break;
                   }
                   
           }
               return true;
        }
         
      
    


    int lalala(int vector[],int c){
    vector[1-c]=vector[1-c]+1;
    if(ciudad[vector[0]][vector[1]]=='v'){
        return -1;
    }
    else{
        return 1;
    }
    }
   


    public void getNombre(){
        System.out.println(nombre);
    }
    public void getOrigen(){
        System.out.println("Origen: ("+origenX+","+origenY+"): "+ciudad[origenX][origenY]);
    }
    public void getDestino(){
        System.out.println("Destino: ("+destinoX+","+destinoY+"): "+ciudad[destinoX][destinoY]);
    }
    public int[] getPosicionActual(){
        System.out.println("Posicion Actual: ("+posicionActual[0]+","+posicionActual[1]+"). continen: "+ciudad[posicionActual[0]][posicionActual[1]]);
        
        return posicionActual;
    }
    Boolean verificarVereda(int[]posicion){
        char valor=ciudad[posicion[0]][posicion[1]];
        
         switch (valor){
            case 'v':
                return true;
            default:
                return false;
        }
    }
    Boolean verificarPeatonal(int[]posicion){
        char valor=ciudad[posicion[0]][posicion[1]];
        
         switch (valor){
            case 'p':
                return true;
            default:
                return false;
        }
    }

    private void esquina(int c, char nombre) {
        int[] posicionAux=new int[2];
        boolean seguir=true;
        System.out.println("*******************Seguir a la esquina:");
          while(seguir){
                    posicionAux[c]=posicionActual[c]-ir;
                    posicionAux[1-c]=posicionActual[1-c];
                    seguir = verificarVereda(posicionAux);
                    if(seguir==true){
                    posicionActual[0]=posicionAux[0];
                    posicionActual[1]=posicionAux[1]; 
                    ciudad[posicionActual[0]][posicionActual[1]]=nombre;
                    //for(int i=0;i<42;i++){for(int j=0;j<42;j++){System.out.print(ciudad[j][i]);}System.out.println();}
                    }
                    else{seguir=false;}      
           }
          System.out.println("*******************Llegue a la esquina.");
    }

  

    
    
}
